package webing.dao;


import java.sql.*;

import java.sql.SQLException;
import java.util.*;

import webing.excepcion.DAOExcepcion;
import webing.modelo.cita;
import webing.util.ConexionBD;

public class citaDAO extends baseDAO {

	public void insertar(cita vo) throws DAOExcepcion {
		System.out.println("citaDAO: insertar(cita vo)");
		String query = "INSERT INTO cita(idcita, medico_loginmedico1, paciente_loginpaciente, sede_nombresede, fecha, hora_ini) VALUES (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getIdcita());
			stmt.setString(2, vo.getLoginmedico());
			stmt.setString(3, vo.getLoginpaciente());
			stmt.setString(4, vo.getNombresede());
			stmt.setString(5, vo.getFecha());
			stmt.setString(6, vo.getHora_ini());
			
					int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	
	public void actualizar(cita vo) throws DAOExcepcion {
		System.out.println("citaDAO: actualizar(cita vo)");
		String query = "update cita set medico_loginmedico1=?, paciente_loginpaciente=?, sede_nombresede=?, fecha=?, hora_ini=? where idcita=?"; 	
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, vo.getLoginmedico());
			stmt.setString(2, vo.getLoginpaciente());
			stmt.setString(3, vo.getNombresede());
			stmt.setString(4, vo.getFecha());
			stmt.setString(5, vo.getHora_ini());
			stmt.setInt(6, vo.getIdcita());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Collection<cita> listar() throws DAOExcepcion {
		System.out.println("citaDAO: listar()");
		Collection<cita> c = new ArrayList<cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT idcita, medico_loginmedico1, paciente_loginpaciente, sede_nombresede, fecha, hora_ini from cita";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				cita vo = new cita();
				
				vo.setIdcita(rs.getInt("idcita"));
				vo.setLoginmedico(rs.getString("medico_loginmedico1"));
				vo.setLoginpaciente(rs.getString("paciente_loginpaciente"));
				vo.setNombresede(rs.getString("sede_nombresede"));
				vo.setFecha(rs.getString("fecha"));
				vo.setHora_ini(rs.getString("hora_ini"));
				
				
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	

    public Collection<cita> buscarPorIdcita(int idcita) throws DAOExcepcion {
	System.out.println("citaDAO: buscarPorCita(int idcita)");
	String query = "SELECT idcita, medico_loginmedico1, paciente_loginpaciente, sede_nombresede, fecha, hora_ini FROM cita WHERE idcita like ?";
	Collection<cita> lista = new ArrayList<cita>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, "%" + idcita + "%");    
		rs = stmt.executeQuery();
		while (rs.next()) {
			cita vo = new cita(); 
			vo.setIdcita(rs.getInt("idcita"));
			vo.setLoginmedico(rs.getString("medico_loginmedico1"));
			vo.setLoginpaciente(rs.getString("paciente_loginpaciente"));
			vo.setNombresede(rs.getString("sede_nombresede"));
			vo.setFecha(rs.getString("fecha"));
			vo.setHora_ini(rs.getString("hora_ini"));
			lista.add(vo);
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return lista;
}
  

    public void eliminar(int idcita) throws DAOExcepcion {
		  System.out.println("citaDAO: eliminar(int idcita)");
		  String query = "DELETE FROM cita WHERE idcita = ?";
		  Connection con = null;
		  PreparedStatement stmt = null;
		  try {
			  		con = ConexionBD.obtenerConexion();
		            stmt = con.prepareStatement(query);
		            stmt.setInt(1, idcita);
		            int i = stmt.executeUpdate();
		            if (i != 1) {
		                    throw new SQLException("No se pudo eliminar");
		            }
		    } catch (SQLException e) {
		            System.err.println(e.getMessage());
		            throw new DAOExcepcion(e.getMessage());
		    } finally {
		            this.cerrarStatement(stmt);
		            this.cerrarConexion(con);
		    }
		}
}

